[UPDATE] AWS Elemental MediaPackage v2がDASH manifestをサポートしました!
はじめに
清水です。AWS Media Servicesの細かなアップデートを抑えておこうのコーナー、本エントリでは昨年2023年にリリースされたAWS Elemental MediaPackage v2でDASH manifestをサポートしたアップデートについてお届けします!本アップデート、2024/04/30の時点でWhat’s New at AWSでの掲載はないのですが、AWS Elemental MediaPackage v2 User GuideのDocument historyに2024/04/19付けで記載がされています。
Document history for the MediaPackage User Guide - AWS Elemental MediaPackage
MediaPackage v2がDASH manifestをサポート
本エントリ執筆時点(2024/04/30)でDocument historyの「Support for DASH」の文字列(リンクになっている箇所)をクリックすると「How MediaPackage works」のページに遷移します。DASH manifestサポートの具体的なアップデート内容についてここから確認できないのですが、以下のページなどからMediaPackage v2のOrigin endpointでContainer typeとしてCMAFを指定することで、DASH形式のマニフェストを出力として利用可能になっていることが確認できます。
- Supported output codecs - Live supported codecs and input types - AWS Elemental MediaPackage
- Endpoint settings fields - AWS Elemental MediaPackage
- Create a DASH manifest - Manifest fields - AWS Elemental MediaPackage
個人的には「あれ?MediaPackage v2ってDASHをまだサポートしてなかったんだ」とサポート状況をきちんと把握できていませんでした……。反省も込めて、MediaPackage v2のEndpointのサポート状況などを振り返っておきます。
まずは2023年5月のMediaPackage v2リリース時点のスクリーンショットを確認してみましょう。(リリース時のブログエントリ「[速報] low-latency HLSにも対応したMediaPackage v2がリリースされました![NEW] | DevelopersIO」から引用しています。)Container typeとしてTSとCMAFの選択が可能ですが、それぞれの説明ではAllow HLS and LL_HLS manifests
と、HLSとLL-HLSのみのサポートである点が記載されています。
[速報] low-latency HLSにも対応したMediaPackage v2がリリースされました![NEW] | DevelopersIO
Manifest definitionsの項目でも、選択できるのはHLS manifests
もしくはLow-latency HLS manifests
の2種類のみという状況でした。
[速報] low-latency HLSにも対応したMediaPackage v2がリリースされました![NEW] | DevelopersIO
その後のMediaPackage v2のアップデートを確認しても、DASH manifestのサポートはこれまでにありませんでした。なんで自分は勘違いしていたのかなと思い返してみると、MediaPackage v1については2017年末のリリース当時からDASHをサポートしていたようです。(これに引っ張られていたのかな、と言い訳しておきます……。)
その他の情報ソースからもMediaPackage v2のDASH manifestサポートについて確認しておきましょう。AWS CLIについては、2024/04/17付けのv1.32.85でDASH manifest向けの更新がありました。
{ "category": "``mediapackagev2``", "description": "Dash v2 is a MediaPackage V2 feature to support egressing on DASH manifest format.", "type": "api-change" },
Bumping version to 1.32.85 · aws/aws-cli@74ae811 · GitHub
また外部サイトとなりますが、AWS API ChangesのMediaPackage v2ページからも、DASH manifestのサポート開始(と、v2リリースからこれまでに同様のアップデートがなかったこととともに)が確認できます。
上記ページで確認できるように、API実行時に指定できるDashManifests
という設定内容が追加されていますね。念のため確認したところ、MediaPackage v2の一つ前のアップデートではこの設定内容はありませんでした。
MediaPackage v2でDASHのライブ配信をしてみた
アップデート内容についてきちんと整理できたところで、実際にMediaPackage v2でDASH manifestを使ったライブストリームを行ってみます。MediaPackage v2のChannel groupとChannelについては以下ブログエントリと同様の手順で作成したものを準備しました。ライブストリーミングに必要なMediaLiveリソースについても同様の手順で準備しておきます。(それぞれの作成手順について、本エントリでは省略します。)
以下、DASH manifest用のOrigin endpoint作成から手順を確認していきます。Channelの詳細画面でOrigin endpointsの項目の[Create endpoint]ボタンから進みます。
NameとDescriptionを適切に選択します。Container typeの項目、CMAFの説明でAllow HLS, LL-HLS and DASH manifests
とDASH manifestについての記載がありますね。CMAF
を選択して進みます。
Segment settingsとEncryptionについてはデフォルトの設定のままにしました。
Endpoint policyではAttach a public policy
を選択しました。今回は検証目的ですので、特にアクセスに制限は行わないものとします。実際の運用ではCloudFront OACを利用するなど適切にアクセス制限を行いましょう。)
最後のManifest definitionsの項目を確認します。HLS manifests
、Low-latency HLS manifests
に続いて、DASH manifests
が追加されていますね![ADD DASH manifest]ボタンを押下しましょう。
DASH manifestが追加されます。今回はManifest nameのみ設定しました。デフォルトの通りindex
としています。そのまま[Create]ボタンを押下してOrigin endpointを作成します。
Advanced manifest configurationの項目について、Endpointはデフォルト設定のまま作成していますが、確認のための内容を展開してみました。HLSやLL-HLSに比べて設定できる項目が多そう、というのが個人的な感想です。(なお、筆者はHLSを利用することが多く、DASHについてはあまり馴染みがない故の感想かとも思います。)
DASH manifestを設定したEndpointが作成できました。
Manifest settingsのタブを確認すると、設定内容の詳細が確認できます。こちらもHLS、 Low-latency HLSのあとにDASHが並んでいますね。
実際にライブストリームを行ってDASH形式の配信を確認してみます。MediaLiveのChannelをStartさせ、Streaming Softwareから映像を打ち上げます。先ほど確認した「DASH manifest definitions」の項目の[Preview]ボタンを押下してみましょう。Dash JavaScript Playerが開きます。右上の[Load]ボタン押下でDASH形式でのライブストリームの再生がはじまりますね!
DASHのマニフェストファイル自体についても確認してみましょう。DASH manifest definitionsの項目で確認できるURLに対してcurlコマンドでGETリクエストを行いました。DASH形式のマニフェストファイルが取得できています。
% curl -i "https://xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com/out/v1/mediapackage-v2-channel-group/mediapackage-v2-channel/mediapackage-v2-dash-manifest/index.mpd" HTTP/2 200 date: Tue, 30 Apr 2024 08:04:46 GMT content-type: application/dash+xml content-length: 2645 x-amzn-requestid: 7cxxxx42-4xx2-4xxb-8xx4-d0xxxxxxxx4f x-amzn-mediapackage-endpoint-id: mediapackage-v2-dash-manifest access-control-allow-origin: * x-amzn-mediapackage-channel-uniqueid: f3xxxxxxxxxxxxxxxxxxxxxxxxxxxx9c x-amzn-mediapackage-manifest-last-sequence: 69 x-amzn-mediapackage-manifest-last-updated: 1714464275116 x-amzn-mediapackage-endpoint-uniqueid: 8cxxxxxxxxxxxxxxxxxxxxxxxxxxxxb8 cache-control: max-age=3 access-control-expose-headers: x-amzn-requestid,x-amzn-errortype,x-amzn-mediapackage-last-sequence,x-amzn-mediapackage-last-updated,Content-Encoding,Date x-amzn-mediapackage-active-input: 1 x-amzn-mediapackage-channel-id: mediapackage-v2-channel access-control-allow-credentials: true <MPD id="0" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="dynamic" minimumUpdatePeriod="PT6S" minBufferTime="PT5S" timeShiftBufferDepth="PT1M0.165S" suggestedPresentationDelay="PT10S" availabilityStartTime="2024-01-01T00:00:00.000000+00:00" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:mspr="urn:microsoft:playready" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" publishTime="2024-04-30T08:04:46.000498+00:00"> <Period id="1714463866116" start="PT2887H57M46S"> <AdaptationSet id="2137622408" contentType="video" mimeType="video/mp4" segmentAlignment="true"> <SegmentTemplate timescale="60000" media="segment_$RepresentationID$_$Number$.mp4" initialization="segment_$RepresentationID$_0_init.mp4" startNumber="60" presentationTimeOffset="138000"> <SegmentTimeline> <S t="21738000" d="360000" r="9"/> </SegmentTimeline> </SegmentTemplate> <Representation id="1" bandwidth="5000000" frameRate="30/1" codecs="avc1.640028" width="1920" height="1080"/> <Representation id="2" bandwidth="3000000" frameRate="30/1" codecs="avc1.64001F" width="1280" height="720"/> </AdaptationSet> <AdaptationSet id="972192134" contentType="audio" mimeType="audio/mp4" segmentAlignment="true" lang="und"> <Label>und</Label> <SegmentTemplate timescale="48000" media="segment_$RepresentationID$_$Number$.mp4" initialization="segment_$RepresentationID$_0_init.mp4" startNumber="60" presentationTimeOffset="110400"> <SegmentTimeline> <S t="17392448" d="287744"/> <S t="17680192" d="288768"/> <S t="17968960" d="287744" r="2"/> <S t="18832192" d="288768"/> <S t="19120960" d="287744" r="2"/> <S t="19984192" d="288768"/> </SegmentTimeline> </SegmentTemplate> <Representation id="3" bandwidth="192000" codecs="mp4a.40.2" audioSamplingRate="48000"> <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/> </Representation> <Representation id="4" bandwidth="192000" codecs="mp4a.40.2" audioSamplingRate="48000"> <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/> </Representation> </AdaptationSet> <SupplementalProperty schemeIdUri="urn:scte:dash:utc-time" value="2024-04-30T08:03:41.116Z"/> </Period> <UTCTiming schemeIdUri="urn:mpeg:dash:utc:direct:2014" value="2024-04-30T08:04:46.498Z"/> </MPD>
まとめ
AWS Elemental MediaPackage v2でDASH manifestをサポートしたアップデートについてお届けしました。Origin endpointのContainer typeでCMAFを選択し、Manifest definitionsでDASHを manifestを追加することでDASH形式のライブストリーミングがMediaPackage v2でも行えます!MediaPackage v1を使ってライブ配信を行っており、MediaPackage v2への移行を検討しつつもDASH manifestのサポートがなかったため移行を断念していた、というケースもあるかと思います。MediaPackage v2についてはCloudFrontのOACがサポートされるなど、よりAWSらしく進化していますので、これを機にv2への移行を検討してみるのもよいかと思いました。ただし、MediaPackage v2については現時点(2024年4月末)でLive機能のみをサポート、VOD機能については未サポート(必然的に今回のDASH manifestサポートもLive機能のみが対象です)である点に留意しておきましょう。
なお個人的には、MediaPackage v2でのDASH manifest未サポートだった点がきちんと追えていなかったこと(v1とごっちゃになってしまっていました)、またDASHのマニフェストを読み慣れていない点の再認識が本エントリの反省ポイントでした。